#ifndef _mr_List
#define _mr_List

typedef struct mr_listnode_s mr_listnode_t , *mr_listnode_p;

typedef struct mr_list_s mr_list_t, *mr_list_p; 

typedef void (mr_list_data_free)(void*);
// todo a new init funtion that take a function pointer for free all nodes
// and data
int  mr_list_init(mr_list_p *plist,mr_list_data_free freecunc);
int  mr_list_push(mr_list_p plist, void *data,int datasize);
int  mr_list_pop(mr_list_p plist,void **pdata,int * datasize );
int  mr_list_destroy(mr_list_p plist);
int  mr_list_get_first(mr_listnode_p *pnode);
int  mr_list_get_next(mr_list_p plist,mr_listnode_p *pnode,void ** ppdata );
int  mr_list_size(mr_list_p plist);
#endif






